package com.zhongkai.service.book;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import com.zhongkai.dao.book.TDjCcdjxxDAO;
import com.zhongkai.dao.book.TDjCcdjxxLsDAO;
import com.zhongkai.dao.book.TDjCcywclDAO;
import com.zhongkai.model.book.TDjCcdjxx;
import com.zhongkai.model.book.TDjCcdjxxLs;
import com.zhongkai.model.book.TDjCcywcl;
import com.zhongkai.model.book.TXtXxts;
import com.zhongkai.model.code.TCsXtcs;
import com.zhongkai.model.config.User;
import com.zhongkai.service.BaseService;
@Component
@Transactional
public class InsuranceOrService extends BaseService{
	private TDjCcdjxxDAO tDjCcdjxxDAO;
	private TDjCcywclDAO tDjCcywclDAO;
	private TDjCcdjxxLsDAO tDjCcdjxxLsDAO;
	@Resource
	public void settDjCcdjxxDAO(TDjCcdjxxDAO tDjCcdjxxDAO) {
		this.tDjCcdjxxDAO = tDjCcdjxxDAO;
	}
	
	@Resource
	public void settDjCcdjxxLsDAO(TDjCcdjxxLsDAO tDjCcdjxxLsDAO) {
		this.tDjCcdjxxLsDAO = tDjCcdjxxLsDAO;
	}
	
	@Resource
	public void settDjCcywclDAO(TDjCcywclDAO tDjCcywclDAO) {
		this.tDjCcywclDAO = tDjCcywclDAO;
	}
	

	public void save(TDjCcdjxx djCcdjxx) throws Exception{
		tDjCcdjxxDAO.insert(djCcdjxx);
	}
	public List<TDjCcdjxx>findByHql(String hql,Object[] values){
		return tDjCcdjxxDAO.findByHql(hql, values);
	}
	
	public Object selectById(Class entityClass,Integer id) throws Exception{
		
		return tDjCcdjxxLsDAO.selectById(entityClass, id);
	}
	/*保存登记表、业务表、历史表*/
	public void saveInsuranceOr_xx(TDjCcdjxx tDjCcdjxx,TDjCcywcl tDjCcywcl,TDjCcdjxxLs tDjCcdjxxLs,int role,HttpServletRequest request) throws Exception{
		if(role==0){
			//状态为待审核
			tDjCcywcl.setBxdjZt("01");
			//业务类型保险代缴04
			tDjCcywcl.setYwlxDm("04");
			//业务处理表登记号参照了登记信息表
			tDjCcywcl.setCcdjh(tDjCcdjxx.getCcdjh());
			
			User user=(User)request.getSession().getAttribute("user");
			tDjCcywcl.setCzrDm(user.getUserIdentifier());
			tDjCcywcl.setCzRq(new Date());
			
			//保存业务表记录
			tDjCcywclDAO.insert(tDjCcywcl);
			
			//...向管理员发信息,0002标识管理员
			List<TCsXtcs> tCsXtcsList=(List<TCsXtcs>)super.select("from TCsXtcs where csDm=?",new Object[]{"0002"});
			List<User> userList=new ArrayList<User>();
			for(TCsXtcs tCsXtcs:tCsXtcsList){
				User userCurr=(User)super.getSingle(User.class, "userIdentifier", tCsXtcs.getCsz());
				userList.add(userCurr);
			}
			Iterator iterator=userList.iterator();
			User sendUser=(User)request.getSession().getAttribute("user");
			while(iterator.hasNext()){
				TXtXxts tXtXxts=new TXtXxts();
				User revc_user=(User) iterator.next();
				String revc_userDm=revc_user.getUserIdentifier();
				tXtXxts.setFjrDm(sendUser.getUserIdentifier());
				tXtXxts.setSjrDm(revc_userDm);
				tXtXxts.setXxbt("有待审核保险代缴业务");
				tXtXxts.setXxnr("审核请进...");
				tXtXxts.setZt("N");
				super.insert(tXtXxts);
			}
			
		}else{
			TDjCcywcl tDjCcywclOld=null;
			//未处理多条未审核数据，此为不合理状态
			List<TDjCcywcl> tDjCcywcl0List=tDjCcywclDAO.findByHql("from TDjCcywcl where ccdjh=? and bxdjZt=?", new Object[]{tDjCcdjxx.getCcdjh(),"01"});
			if(tDjCcywcl0List!=null)
				tDjCcywclOld=tDjCcywcl0List.get(0);
			
			String bxdjNfq=tDjCcywcl.getBxdjNfq();
			String bxdjNfz=tDjCcywcl.getBxdjNfz();
			String bxdjKjd=tDjCcywcl.getBxdjKjd();
			String bxdjBdh=tDjCcywcl.getBxdjBdh();
			
			//BeanUtils.copyProperties(tDjCcywcl0, tDjCcywcl);
			SimpleDateFormat sdf=new SimpleDateFormat("yyyyMM");
			Date sbnyDate=sdf.parse((Integer.valueOf(bxdjNfz)+1)+"01");
			tDjCcywclOld.setSbRq(sbnyDate);
			tDjCcywclOld.setBxdjNfq(bxdjNfq);
			tDjCcywclOld.setBxdjNfz(bxdjNfz);
			tDjCcywclOld.setBxdjKjd(bxdjKjd);
			tDjCcywclOld.setBxdjBdh(bxdjBdh);
			//审核通过
			tDjCcywclOld.setBxdjZt("02");
			
			User user=(User)request.getSession().getAttribute("user");
			tDjCcywclOld.setXgrDm(user.getUserIdentifier());
			tDjCcywclOld.setXgRq(new Date());
			
			//1、更新业务表记录
			tDjCcywclDAO.update(tDjCcywclOld);
			
			TDjCcdjxx tDjCcdjxxOld=(TDjCcdjxx)tDjCcdjxxDAO.selectById(TDjCcdjxx.class,tDjCcdjxx.getCcdjh() );
			//保存原来的登记信息到历史登记实体
			BeanUtils.copyProperties(tDjCcdjxxOld, tDjCcdjxxLs);
			//参照了新的业务处理表业务处理序号,就是原来的,因为业务处理只做了更新
			tDjCcdjxxLs.setYwclXh(tDjCcywclOld.getYwclXh());
			//2、保存历史登记表
			tDjCcdjxxLsDAO.insert(tDjCcdjxxLs);
			
			//申报年月为代缴结束年的次年01月
			tDjCcdjxxOld.setSbqsny((Integer.valueOf(bxdjNfz)+1)+"01");
			tDjCcdjxxOld.setBz(tDjCcdjxx.getBz());
			//3、更新登记表旧记录
			tDjCcdjxxDAO.update(tDjCcdjxxOld);
			
			User sendUser=user;
			
			TXtXxts tXtXxts=new TXtXxts();
			//操作员必需要有编码，否则发生异常
			User revc_user=(User)super.getSingle(User.class, "userIdentifier", tDjCcywclOld.getCzrDm());
			String revc_userDm=revc_user.getUserIdentifier();
			tXtXxts.setFjrDm(sendUser.getUserIdentifier());
			tXtXxts.setSjrDm(revc_userDm);
			tXtXxts.setXxbt("审核结果");
			tXtXxts.setXxnr("查看结果请进...");
			tXtXxts.setZt("N");
			super.insert(tXtXxts);
			
		}
		
	}
}
